package com.youlai.jdk;

import com.youlai.jdk.service.MyClass;
import org.junit.jupiter.api.Test;

import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * java9新特性
 * 模块化系统：引入了一个新的模块化系统，可以将JDK和应用程序划分为一组模块，从而提高可维护性和安全性。
 * JShell：提供了一个交互式的编程环境，可以在命令行中直接编写和执行Java代码。
 * 集合工厂方法：提供了一组新的工厂方法，用于创建不可变集合和列表。
 * 私有接口方法：接口中可以包含私有方法的实现，从而避免在实现类中重复编写相同的代码。
 * HTTP/2客户端：提供了一个新的HTTP客户端API，支持HTTP/2协议。
 * 进程API：提供了一个新的进程API，可以访问和管理系统中的进程。
 * 改进的Javadoc：Javadoc支持HTML5，并提供了新的标签和选项。
 * @author zc
 * @date 2023-03-25 13:23
 */
public class Java9 {
    /**
     * 模块化
     * 模块化的核心是module-info.java文件，它定义了模块的名称、依赖关系和导出的包等信息。
     */
    void myclass() {
        MyClass myClass = new MyClass();
        myClass.myMethod();
    }

    /**
     * 创建不可变的集合工厂方法
     */
    @Test
    void collectionFactoryMethods() {
        List<String> list = List.of("a", "b", "c"); // 创建不可变List集合
        Set<String> set = Set.of("a", "b", "c"); // 创建不可变Set集合
        Map<String, Integer> map = Map.of("a", 1, "b", 2, "c", 3); // 创建不可变Map集合
        System.out.println(list);
        System.out.println(set);
        System.out.println(map);
    }

    /**
     * 演示接口私有方法的使用
     */
    @Test
    void privateInterfaceMethod() {
        MyInterface myInterface = new MyInterfaceImpl();
        myInterface.publicMethod();
    }

    private interface MyInterface {
        default void publicMethod() {
            privateMethod();
        }

        private void privateMethod() {
            System.out.println("这是一个接口的私有方法");
        }
    }

    private class MyInterfaceImpl implements MyInterface {
    }

    /**
     * 使用HTTP客户端API发送GET请求
     */
    @Test
    void httpClientGet() {
        HttpClient httpClient = HttpClient.newHttpClient();
        HttpRequest httpRequest = HttpRequest.newBuilder()
                .uri(URI.create("https://www.ww.baidu.com"))
                .GET()
                .build();
        try {
            HttpResponse<String> httpResponse = httpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString());
            System.out.println(httpResponse.body());
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }


    /**
     *使用进程API来获取当前进程的PID
     */
    @Test
    void getProcessId() {
        ProcessHandle currentProcess = ProcessHandle.current();
        System.out.println("当前进程的PID: " + currentProcess.pid());
    }

/**
 * 使用新的@module标签来生成Javadoc文档
 * @module com.youlai.jdk.java9
 */


}
